`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/06/23 20:50:27
// Design Name: 
// Module Name: SEXT
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module SEXT(
    input rst,
    input [24:0] din,
    input [2:0] sext_op,
    output [31:0] ext
    );
      
    
reg [31:0] dout;
assign ext = dout;  

always @(*)
begin
   if (rst)
   begin
      dout <= 32'hzzzzzzzz; 
   end
   else
   begin
       case (sext_op)
           `ITYPE:     dout <= {{20{din[24]}},din[24:13]};
           `STYPE:     dout <= {{20{din[24]}},din[24:18],din[4:0]};
           `BTYPE:     dout <= {{19{din[24]}},din[24],din[0],din[23:18],din[4:1],1'b0};
           `UTYPE:     dout <= {din[24:5],12'b0};
           `JTYPE:     dout <= {{19{din[24]}},din[24],din[12:5],din[13],din[23:14],1'b0};
           `SHIFT:     dout <= {25'b0,din[17:13]};
           default:    dout <= 32'hzzzzzzzz;
       endcase
   end
end
 
endmodule
